//package com.github.xiaolyuh.base;
//
//import com.github.xiaolyuh.entity.RedisName;
//import com.github.xiaolyuh.manager.CacheManager;
//import com.github.xiaolyuh.utils.FastJSONHelper;
//import com.google.common.base.Throwables;
//import com.google.common.collect.Lists;
//import io.lettuce.core.RedisClient;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.util.NumberUtils;
//
//import java.util.List;
//import java.util.Objects;
//import java.util.Set;
//
//public class BaseRedisManager {
//
//    private static final Logger logger = LoggerFactory.getLogger(BaseRedisManager.class);
//
//    /**
//     * 读取缓存值
//     *
//     * @param redisName
//     * @param key
//     * @return
//     */
//    public String getValue(RedisName redisName, String key) {
//        try {
//            return redisClient.get()get(key);
//        } catch (Exception e) {
//            logger.error("[cache]读取缓存key= {} 失败.异常信息：{}", key, Throwables.getStackTraceAsString(e));
//        }
//        return null;
//    }
//
//    /**
//     * 批量读取缓存值
//     *
//     * @param redisName
//     * @param keyList
//     * @return
//     */
//    public List<String> mGetValue(RedisName redisName, List<String> keyList) {
//        try {
//            String[] array = new String[keyList.size()];
//            List<String> data = getRedis(redisName).mget(keyList.toArray(array));
//            return data;
//        } catch (Exception e) {
//            logger.error("[cache]批量读取缓存key= {} 失败.异常信息：{}", keyList, Throwables.getStackTraceAsString(e));
//        }
//        return Lists.newArrayList();
//    }
//
//    /**
//     * redis发布
//     * @param redisName
//     * @param destination
//     * @param msg
//     */
//    public boolean publish(RedisName redisName,String destination,String msg){
//        logger.info("destination={} msg={}",destination,msg);
//        try{
//            IRedisCacheService cacheService = getRedis(redisName);
//            cacheService.publish(destination,msg);
//            return true;
//        }catch (Exception e){
//            logger.error("[cache]redis publish消息失败 destination= {} msg= {}。异常信息：{}", destination,msg,Throwables.getStackTraceAsString(e));
//        }
//        return false;
//    }
//
//    /**
//     * redis 订阅
//     * @param redisName
//     * @param jedisPubSub
//     * @param channel
//     */
//    public boolean subscribe(RedisName redisName,JedisPubSub jedisPubSub, String channel){
//        try{
//            IRedisCacheService cacheService = getRedis(redisName);
//            cacheService.subscribe(jedisPubSub,channel);
//            return true;
//        }catch (Exception e){
//            logger.error("[cache]redis subscribe 失败 channel= {}。异常信息：{}", channel,Throwables.getStackTraceAsString(e));
//        }
//        return false;
//    }
//
//    /**
//     * redis set 添加元素
//     * @param redisName
//     * @param key
//     * @param members
//     * @param expireTime (seconds)
//     * @return
//     */
//    public boolean sadd(RedisName redisName,String key,String[] members,int expireTime){
//        try{
//            IRedisCacheService cacheService = getRedis(redisName);
//            cacheService.sadd(key,members);
//            cacheService.expire(key,expireTime);
//            return true;
//        }catch (Exception e){
//            logger.error("[cache]设置缓存失败 key= {} member= {}。异常信息：{}", key, Throwables.getStackTraceAsString(e));
//        }
//        return false;
//    }
//
//    /**
//     * redis set 元素移除
//     * @param redisName
//     * @param key
//     * @param member
//     * @return
//     */
//    public boolean srem(RedisName redisName,String key,String member){
//        try{
//            IRedisCacheService cacheService = getRedis(redisName);
//            cacheService.srem(key,member);
//            return true;
//        }catch (Exception e){
//            logger.error("[cache]删除缓存失败 key= {} member= {}。异常信息：{}", key, Throwables.getStackTraceAsString(e));
//        }
//        return false;
//    }
//
//    /**
//     * redis set 统计元素个数
//     * @param redisName
//     * @param key
//     * @return
//     */
//    public int scard(RedisName redisName,String key){
//        try{
//            IRedisCacheService cacheService = getRedis(redisName);
//            //cache 包没暴露scard方法，只能取出元素后计数
//            Set<String> smembers = cacheService.smembers(key);
//            if(Objects.isNull(smembers)){
//                return NumberUtils.INTEGER_ZERO;
//            }
//            return smembers.size();
//        }catch (Exception e){
//            logger.error("[cache] 统计元素个数失败 key= {}。异常信息：{}", key, Throwables.getStackTraceAsString(e));
//        }
//        return Integer.MAX_VALUE;
//    }
//
//    protected static String md5(Object data) {
//        return MD5.getInstance().getMD5String(FastJSONHelper.serialize(data));
//    }
//
//
//    @Autowired
//    private CacheManager cacheManager;
//
//    @Autowired
//    private com.github.xiaolyuh.redis.clinet.RedisClient redisClient;
//
//}
